home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 34.zip / BS1 part 34 / FredFish PD 316.adf / Vectors / V1.1 / src / bmaprport.c next >
C/C++ Source or Header  |  1990-02-06  |  2KB  |  95 lines

  1. /**********************************************************************
  2.  *
  3.  *       fichier:  BMap.c
  4.  *
  5.  *       fonction: Alloc & Free de BitMap
  6.  *
  7.  *       creation: .........  gauthier groult
  8.  *       revision: 20-Sep-88  jm forgeas
  9.  *
  10.  **********************************************************************/
  11.  
  12.  
  13. #include <exec/types.h>
  14. #include <exec/memory.h>
  15. #include <graphics/rastport.h>
  16. #include <intuition/intuisup.h>
  17.  
  18. #ifdef USE_PROTOS
  19. #include <proto/all.h>
  20. #endif
  21.  
  22.  
  23. VOID is_FreeBMap( bitmap )
  24. struct BitMap *bitmap;
  25. {
  26.   UBYTE i;
  27.  
  28.     if (!bitmap) return;
  29.     for(i=0; i<bitmap->Depth; i++)
  30.         if (bitmap->Planes[i]) FreeMem( bitmap->Planes[i], bitmap->BytesPerRow * bitmap->Rows );
  31.     FreeMem( bitmap, sizeof(struct BitMap) );
  32. }
  33.  
  34. struct BitMap *is_AllocBMap( depth, width, height )
  35. UBYTE depth;
  36. UWORD width, height;
  37. {
  38.     struct BitMap *bitmap;
  39.     UBYTE i;
  40.  
  41.         if ((bitmap = (struct BitMap *) AllocMem( sizeof(struct BitMap), MEMF_PUBLIC | MEMF_CLEAR)))
  42.             {
  43.             InitBitMap( bitmap, depth, width, height );
  44.             if (!(bitmap->Planes[0] = (PLANEPTR)AllocRaster(width, height*depth)))
  45.                     {
  46.                     is_FreeBMap( bitmap );
  47.                     return(NULL);
  48.                     }
  49.             for (i=1; i<depth; i++)
  50.                  bitmap->Planes[i] = (PLANEPTR)(bitmap->Planes[0]+RASSIZE(width, height*i));
  51.             BltClear( bitmap->Planes[0], RASSIZE(width, height*depth), 1);
  52.             }
  53.         return( bitmap );
  54. }
  55.  
  56. VOID is_FreeRPort( rport )
  57. struct RastPort *rport;
  58. {
  59.     if (rport) FreeMem( rport, sizeof(struct RastPort) );
  60. }
  61.  
  62. struct RastPort *is_AllocRPort()
  63. {
  64.   struct RastPort *rport;
  65.  
  66.     if (rport = (struct RastPort *) AllocMem( sizeof(struct RastPort), MEMF_PUBLIC | MEMF_CLEAR))
  67.     InitRastPort( rport );
  68.     return( rport );
  69. }
  70.  
  71. VOID is_FreeBMapRPort( rport )
  72. struct RastPort *rport;
  73. {
  74.     is_FreeBMap( rport->BitMap );
  75.     is_FreeRPort( rport );
  76. }
  77.  
  78.  
  79. struct RastPort *is_AllocBMapRPort( depth, width, height )
  80. UBYTE  depth;
  81. UWORD  width, height;
  82. {
  83.   struct RastPort *rport=NULL;
  84.  
  85.     if (rport = is_AllocRPort())
  86.         {
  87.         if (! (rport->BitMap = is_AllocBMap( depth, width, height )))
  88.             {
  89.             is_FreeBMapRPort( rport );
  90.             rport = NULL;
  91.             }
  92.         }
  93.     return( rport );
  94. }
  95.